from handle_balance import find_index
import pandas as pd
from shutil import copyfile

is_estimate = False


def get_balance(s):
    df = pd.read_excel('data/balance.xlsx', index_col=0)
    global is_estimate
    # update flag every time called
    if float(df['余额']['主营业务收入']) != 0 and float(df['余额']['主营业务成本'] == 0):
        is_estimate = True
    else:
        is_estimate = False
    if s == '主营业务成本' and is_estimate:
        return round(float(df['余额']['主营业务收入']) * 0.6, 2)
    return round(float(df['余额'][s]), 2)


def create():
    benefit_list = (
        ["一、营业收入", 0],  # 由公式求得
        ["减：营业成本", 0],  # 由公式求得
        ["营业税金及附加", get_balance("营业税金及附加")],
        ["销售费用", get_balance("销售费用")],
        ["管理费用", get_balance("管理费用")],
        ["财务费用", get_balance("财务费用")],
        ["资产减值损失", 0],  # 余额表中没有
        ["加：公允价值变动利益（损失以“-”号填列）", 0],  # 余额表中没有
        ["投资利益（损失以“-”号填列）", 0],  # 没有
        ["其中：对联营企业和合资企业的投资收益", 0],  # 没有
        ["二、营业利润（亏损以“-”号填列）", 0],  # 由公式求得
        ["加：营业外收入", 0],  # 没有
        ["减：营业外支出", get_balance("营业外支出")],
        ["其中：非流动资产处置流失", 0],  # 没有
        ["三、利润总额（亏损总额以“-”号填列）", 0],  # 由公式求得
        ["减：所得税费用", get_balance("所得税费用")],
        ["四、净利润", 0],  # 由公式求得
        ["五、每股收益", 0],
        ["（一）基本每股收益", 0],
        ["（二）稀释每股收益", 0]
    )

    update_single_value(benefit_list)

    if is_estimate:
        index = find_index(benefit_list, "减：营业成本")
        benefit_list[index][1] = str(benefit_list[index][1]) + "（估计）"
        index = find_index(benefit_list, "二、营业利润（亏损以“-”号填列）")
        benefit_list[index][1] = str(benefit_list[index][1]) + "（估计）"
        index = find_index(benefit_list, "三、利润总额（亏损总额以“-”号填列）")
        benefit_list[index][1] = str(benefit_list[index][1]) + "（估计）"
        index = find_index(benefit_list, "四、净利润")
        benefit_list[index][1] = str(benefit_list[index][1]) + "（估计）"


    # backup
    try:
        copyfile('data/利润表.xlsx', 'data/利润表备份.xlsx')
    except FileNotFoundError:
        pass

    result = pd.DataFrame(benefit_list, columns=['项目', '利润'])
    result.to_excel('data/利润表.xlsx', index=False)


def update_single_value(l):
    # 营业收入 = 主营业务收入 + 其他业务收入
    index_yysr = find_index(l, '一、营业收入')
    l[index_yysr][1] = round(get_balance("主营业务收入") + get_balance("其他业务收入"), 2)
    # 营业成本 = 主营业务成本 + 其他业务成本
    index_yycb = find_index(l, '减：营业成本')
    l[index_yycb][1] = round(get_balance("主营业务成本") + get_balance("其他业务成本"), 2)
    # 营业利润 = 营业收入 - 营业成本 - 营业税金及附加 - 销售费用 - 管理费用 - 财务费用 - （资产减值损失 + 投资收益 + 公允价值变动收益）
    index_yylr = find_index(l, '二、营业利润（亏损以“-”号填列）')
    l[index_yylr][1] = round(l[index_yysr][1] - l[index_yycb][1] - l[find_index(l, '营业税金及附加')][1] - l[find_index(l, '销售费用')][1] - l[find_index(l, '管理费用')][1] - l[find_index(
        l, '财务费用')][1] - (l[find_index(l, '资产减值损失')][1] + l[find_index(l, '投资利益（损失以“-”号填列）')][1] + l[find_index(l, '加：公允价值变动利益（损失以“-”号填列）')][1]), 2)
    # 利润总额 = 营业利润 + 营业外收入 - 营业外支出
    index_lrze = find_index(l, '三、利润总额（亏损总额以“-”号填列）')
    l[index_lrze][1] = round(l[index_yylr][1] + 0 - get_balance("营业外支出"), 2)
    # 净利润 = 利润总额 - 所得税费用
    index_jlr = find_index(l, '四、净利润')
    l[index_jlr][1] = round(l[index_lrze][1] - get_balance('所得税费用'), 2)


if __name__ == "__main__":
    create()

# 1，一旦有主营业务收入但主营业务成本还没有记录的时候，主营业务成本以主营业务收入的0.6先计入
# 2.我们最后一笔分录会把上述提到的科目余额都变成0，但是这样的话利润表就0了，所以可以保存最后一张不为0的利润表吗
